﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.UI.WebControls;
using vudu.ClasesDominio;
using vudu.Logica.Fachada;
using vudu.Presentacion.Contrato.VU_06_Gestionar_Profesores;


namespace vudu.Presentacion.Presentador.VU_06_Gestionar_Profesores
{
    public class PresentadorAgregarProfesor
    {
        private IContratoAgregarProfesor _vista;
        private EnlaceLogico _fachada2 = new EnlaceLogico();
        private EnlaceLogico _fachada = new EnlaceLogico();
        private String _mensajeExitoso = "Operación Exitosa";
        private String _mensajeErrorBd = "Operación Fallida: Error en base de datos";
        private String _mensajeErrorDatos = "Operación Fallida: Error en datos Ingresados";
        private int _longitudTelefono = 7;
        private int _longitudCodigo = 4;
        private System.Drawing.Color _colorMensajeError = System.Drawing.Color.Red;
        private System.Drawing.Color _colorMensajeExitoso = System.Drawing.Color.Green;
        private System.Drawing.Color _colorLabelBase = System.Drawing.Color.Black;
        private String _classMensajeExitoso = "transaccionExitosa";
        private String _classMensajeError = "transaccionFallida";
        private Escuela esc;

        public PresentadorAgregarProfesor (IContratoAgregarProfesor vista, EnlaceLogico _fachada)
        {
            _vista = vista;
            esc = (Escuela) _fachada.RolActual;
        }

        public void BotonAceptar()
        {
                Rol profesor = _fachada2.EnlaceCrearProfesor();
                if (ValidarFormulario())
                {
                    //Profesor profesor = new Profesor();
                    ((Profesor) profesor).Nombre = _vista.NombreProfesor.Text;
                    ((Profesor) profesor).Apellido = _vista.ApellidoProfesor.Text;
                    ((Profesor) profesor).Cedula = int.Parse(_vista.CedulaProfesor.Text);
                    ((Profesor) profesor).Nacionalidad = _vista.NacionalidadProfesor.Text;
                    ((Profesor) profesor).Email = _vista.EmailProfesor.Text;
                    ((Profesor) profesor).Sexo = _vista.SexoProfesor.Text;
                    ((Profesor) profesor).Telefono = _vista.CodTelefonoProfesor.Text + _vista.TelefonoProfesor.Text;
                    ((Profesor) profesor).FechaNacimiento = Convert.ToDateTime(_vista.FechaNacimientoProfesor.Text);
                    ((Profesor) profesor).TiempoLaboral = _vista.TipoContratoProfesor.Text;
                    ((Profesor) profesor).Cargo = _vista.CargoProfesor.Text;
                    ((Profesor) profesor).FechaInicio = Convert.ToDateTime(_vista.FechaInicioContratoProfesor.Text);
                    ((Profesor) profesor).FechaFin = Convert.ToDateTime(_vista.FechaFinContratoProfesor.Text);

                    
                    _fachada.EnlaceAgregarProfesor((Profesor) profesor, esc.IdEscuela);
                    _vista.AvisodeError.Text = _mensajeExitoso;
                    _vista.AvisodeError.Visible = true;
                    _vista.AvisodeError.ForeColor = _colorMensajeExitoso;
                    BorrarCampos();

                }

                else
                {
                    _vista.AvisodeError.ForeColor = _colorMensajeError;
                    _vista.AvisodeError.Text = _mensajeErrorDatos;
                    _vista.AvisodeError.Visible = true;
                    
                }
            

            
        }

        public void BorrarCampos()
        {
            _vista.NombreProfesor.Text = "";
            _vista.ApellidoProfesor.Text = "";
            _vista.CedulaProfesor.Text = "";
            _vista.NacionalidadProfesor.Text = "";
            _vista.EmailProfesor.Text = "";
            _vista.SexoProfesor.Text = "";
            _vista.CodTelefonoProfesor.Text = "";
            _vista.SexoProfesor.SelectedValue = null;
            _vista.TelefonoProfesor.Text = "";
            _vista.FechaNacimientoProfesor.Text = "";
            _vista.TipoContratoProfesor.Text = "";
            _vista.CargoProfesor.Text = "";
            _vista.FechaInicioContratoProfesor.Text = "";
            _vista.FechaFinContratoProfesor.Text = "";
            
        }
        
        public void MensajesEnBlanco()
        {
            _vista.lNombreEscuela.Text = esc.NombreEscuela;
            _vista.AvisodeError.Visible = false;
        }

        #region Funciones utilizadas para validar informacion del formulario

        /// <summary>
        /// Funcion que valida que la informacion del formulario este correcta
        /// </summary>
        /// <returns></returns>
        public bool ValidarFormulario()
        {
            bool respuesta = true;
            bool validaCedula = ValidarObligatorio(_vista.CedulaProfesor, _vista.lCedula);
            bool validaNombre = ValidarObligatorio(_vista.NombreProfesor, _vista.lNombre);
            bool validaApellido = ValidarObligatorio(_vista.ApellidoProfesor, _vista.lApellido);
            bool validaSexo = ValidarSexo(_vista.SexoProfesor);
            bool validaTelefono = ValidarCampoTelefonoEscuela(_vista.TelefonoProfesor, _vista.CodTelefonoProfesor);
            bool validaEmail = ValidarObligatorio(_vista.EmailProfesor, _vista.lEmail) && validarEmail(_vista.EmailProfesor.Text);
            bool validaFechaNacimiento = ValidarObligatorio(_vista.FechaNacimientoProfesor, _vista.lFechaNacimiento) &&
                ValidarFechaNacimiento(_vista.FechaNacimientoProfesor.Text, _vista.lFechaNacimiento);
            bool validaFechaInicio = ValidarObligatorio(_vista.FechaInicioContratoProfesor, _vista.lFechaInicio); 
            bool validaFechaFin = ValidarObligatorio(_vista.FechaFinContratoProfesor, _vista.lFechaFin);
            bool validaCargo = ValidaCargo(_vista.CargoProfesor, _vista.lCargo);
            bool validaContrato = ValidaContrato(_vista.TipoContratoProfesor, _vista.lTipoContrato);
            bool validarFechasNI = ValidarFechas(_vista.FechaNacimientoProfesor.Text,
                                               _vista.FechaInicioContratoProfesor.Text,
                                               _vista.lFechaNacimiento,_vista.lFechaInicio);
            bool validarFechasNF = ValidarFechas(_vista.FechaNacimientoProfesor.Text,
                                               _vista.FechaFinContratoProfesor.Text,
                                               _vista.lFechaNacimiento, _vista.lFechaFin);
            bool validarFechasIF = ValidarFechas(_vista.FechaInicioContratoProfesor.Text,
                                               _vista.FechaFinContratoProfesor.Text,
                                               _vista.lFechaInicio, _vista.lFechaFin);

            respuesta = validaNombre && validaApellido && validaTelefono && validaSexo && validaEmail
                        && validaFechaNacimiento && validaFechaFin && validaFechaInicio && validaCargo && validaContrato
               && validarFechasNI && validarFechasNF && validarFechasIF && validaCedula;

            return respuesta;
            
        }

        
       
        ///// Funcion que valida los campos obligatorios
        
        public bool ValidarObligatorio(TextBox textBoxAValidar, Label labelAActivar)
        {
            String campo = textBoxAValidar.Text;
            Regex regex = new Regex(@"(\s)");
            int espacios = regex.Matches(campo).Count;

            if (campo.Length == 0 || espacios == campo.Length)
            {
                CambiarLabel(labelAActivar, false);
                return false;
            }
            else
            {
                CambiarLabel(labelAActivar, true);
                return true;
            }
        }

        ///// <summary>
        ///// Funcion que cambiar los label segun la informacion de los textbox
        ///// </summary>
        ///// <param name="numero"></param>
        ///// <returns>retorna true si es, false caso contrario.</returns>
        public void CambiarLabel(Label aCambiar, bool validacion)
        {
            if (validacion)
            {
                aCambiar.ForeColor = _colorLabelBase;
            }
            else
            {
                aCambiar.ForeColor = _colorMensajeError;
            }
        }

        ///// <summary>
        ///// Funcion que valida si la informacion de Campo telefono y codigo es correcta.
        ///// </summary>
        ///// <param name="numero"></param>
        ///// <returns>retorna true si es, false caso contrario.</returns>
        public bool ValidarCampoTelefono(TextBox telefono, TextBox codigo)
        {
            bool validacion = true;
            String _telefono = telefono.Text;
            String _codigo = codigo.Text;

            if ((_telefono.Length < _longitudTelefono) || (_codigo.Length < _longitudCodigo))
            {
                validacion = validacion && false;
            }
            

            if (validacion)
            {
                CambiarLabel(_vista.lTelefono, true);
                return true;
            }
            else
            {
                CambiarLabel(_vista.lTelefono, false);
                return false;
            }
        }


        //Validar que radionutton sexo este seleccionado

        public  bool ValidarSexo (RadioButtonList sexo)
        {
            if (String.IsNullOrEmpty(sexo.SelectedValue))
            {
                CambiarLabel(_vista.lSexo, false);
                return false;
            }

            else
                CambiarLabel(_vista.lSexo, true);
                return true;
        }

        public bool ValidaContrato (DropDownList lista, Label labelActivar)
        {
            String seleccionado = lista.Text;
            String seleccionar = "Seleccione Contrato";
                if (seleccionado == seleccionar || seleccionado == "")
                {
                    CambiarLabel(_vista.lTipoContrato, false);
                    return false;
                }
                else
                {
                    CambiarLabel(_vista.lTipoContrato, true);
                    return true;
                }
                
        }

        public bool ValidaCargo (DropDownList lista, Label labelActivar)
        {
            String seleccionado = lista.Text;
            String seleccionar = "Seleccione Cargo";
                if (seleccionado == seleccionar || seleccionado == "")
                {
                    CambiarLabel(_vista.lCargo, false);
                    return false;
                }
                else
                {
                    CambiarLabel(_vista.lCargo, true);
                    return true;
                }
                
        }

        public bool ValidarCampoTelefonoEscuela(TextBox telefono, TextBox codigo)
        {
            bool validacion = true;
            String _telefono = telefono.Text;
            String _codigo = codigo.Text;

            if ((_telefono.Length < _longitudTelefono) || (_codigo.Length < _longitudCodigo))
            {
                validacion = validacion && false;
            }


            if (validacion)
            {
                CambiarLabel(_vista.lTelefono, true);
                return true;
            }
            else
            {
                CambiarLabel(_vista.lTelefono, false);
                return false;
            }
        }

        public bool validarEmail(string email)
        {
            string expresion = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";

            if (Regex.IsMatch(email, expresion))
            {
                if (Regex.Replace(email, expresion, String.Empty).Length == 0)
                {
                    CambiarLabel(_vista.lEmail, true);
                    return true;
                }
                else
                {
                    CambiarLabel(_vista.lEmail, false);
                    return false;
                }
            }
            else
            {
                CambiarLabel(_vista.lEmail, false);
                return false;
            }
        }

        public bool ValidarFechas(string _fecha1, string _fecha2, Label lvalidar1, Label lvalidar2)
        {


            if (_fecha1 == "" || _fecha2 == "")

                return false;

            else
            {
                DateTime fecha1 = Convert.ToDateTime(_fecha1);
                DateTime fecha2 = Convert.ToDateTime(_fecha2);

                if (fecha1 > fecha2)
                {
                    CambiarLabel(lvalidar1, false);
                    CambiarLabel(lvalidar2, false);
                    return false;
                }

                else
                {
                    return true;
                }
            }

            
        }

        public bool ValidarFechaNacimiento(string _fecha1, Label lvalidar1)
        {
            String fechaComparar = "01/01/2011" ; 

            if (_fecha1 == "")

                return false;

            else
            {
                DateTime fecha1 = Convert.ToDateTime(_fecha1);
                DateTime fecha2 = Convert.ToDateTime(fechaComparar);

                if (fecha1 >= fecha2)
                {
                    CambiarLabel(lvalidar1, false);
                    return false;
                }

                else
                {
                    return true;
                }
            }


        }


        #endregion

    }
}